package com.zzyl.nursing.job;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zzyl.common.utils.spring.SpringUtils;
import com.zzyl.nursing.domain.Contract;
import com.zzyl.nursing.service.IContractService;
import com.zzyl.nursing.service.impl.ContractServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 合同状态更新任务
 * 张曦文
 */
@Component("updateContractJob")
public class UpdateContractJob {
    @Autowired(required = false)
    private IContractService contractService;

    public void all() {
        System.out.println("合同状态更新任务开始执行...");

        // 使用类级别的 contractService，而不是重新声明
        IContractService service = getContractService();
        if (service == null) {
            System.err.println("错误：contractService 未初始化");
            return;
        }

        try {
            // 未生效到已生效 - 修正逻辑条件
            LambdaUpdateWrapper<Contract> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
            lambdaUpdateWrapper.set(Contract::getStatus, 1);
            lambdaUpdateWrapper.eq(Contract::getStatus, 0);
            lambdaUpdateWrapper.le(Contract::getStartDate, LocalDateTime.now());
            lambdaUpdateWrapper.ge(Contract::getEndDate, LocalDateTime.now());
            boolean updated1 = service.update(lambdaUpdateWrapper);
            System.out.println("更新未生效到已生效的合同状态: " + (updated1 ? "成功" : "失败"));
            if (!updated1) {
                System.out.println("提示：没有符合条件的未生效合同需要更新为已生效");
            }

            // 已生效到已过期
            LambdaUpdateWrapper<Contract> lambdaUpdateWrapper1 = new LambdaUpdateWrapper<>();
            lambdaUpdateWrapper1.set(Contract::getStatus, 2);
            lambdaUpdateWrapper1.eq(Contract::getStatus, 1);
            lambdaUpdateWrapper1.lt(Contract::getEndDate, LocalDateTime.now());
            boolean updated2 = service.update(lambdaUpdateWrapper1);
            System.out.println("更新已生效到已过期的合同状态: " + (updated2 ? "成功" : "失败"));
            if (!updated2) {
                System.out.println("提示：没有符合条件的已生效合同需要更新为已过期");
            }

            System.out.println("合同状态更新任务执行完成");
        } catch (Exception e) {
            System.err.println("合同状态更新任务执行异常: " + e.getMessage());
            e.printStackTrace();
        }
    }

    private IContractService getContractService() {
        if (contractService != null) {
            return contractService;
        }

        // 如果自动注入失败，尝试手动获取
        try {
            return SpringUtils.getBean(IContractService.class);
        } catch (Exception e) {
            System.err.println("无法从Spring上下文获取IContractService: " + e.getMessage());
            return null;
        }
    }
}





//        System.out.println("-合同定时任务启动-当前时间：" + LocalDateTime.now());
//        ContractServiceImpl contractService = SpringUtils.getBean(ContractServiceImpl.class);
//        LocalDateTime now = LocalDateTime.now();
//
//        // 查询所有合同
//        List<Contract> contractList = contractService.list();
//
//        System.out.println("查询到合同数量：" + contractList.size());
//
//        for (Contract contract : contractList) {
//            LocalDateTime start = contract.getStartDate();
//            LocalDateTime end = contract.getEndDate();
//            Integer oldStatus = contract.getStatus();
//            Integer newStatus;
//
//            if (now.isBefore(start)) {
//                newStatus = 0; // 未生效
//            } else if (now.isAfter(end)) {
//                newStatus = 2; // 已过期
//            } else {
//                newStatus = 1; // 已生效
//            }
//            System.out.println("合同ID：" + contract.getId() +
//                    " 开始：" + start +
//                    " 结束：" + end +
//                    " 当前状态：" + getStatusName(oldStatus) +
//                    (oldStatus.equals(newStatus) ? "（未变化）" : "（将变为 " + getStatusName(newStatus) + "）"));
//
//            if (!newStatus.equals(oldStatus)) {
//                contract.setStatus(newStatus);
//                contractService.updateById(contract);
//                System.out.println("合同{" + contract.getId() + "状态由"
//                        + getStatusName(oldStatus) + "变为" + getStatusName(newStatus) + "}");
//            }
//        }
//
//        System.out.println("-合同定时任务结束-\n");
//    }
//    private String getStatusName(Integer status) {
//        switch (status) {
//            case 0: return "未生效";
//            case 1: return "已生效";
//            case 2: return "已过期";
//            case 3: return "已失效";
//            default: return "未知状态";
//        }
//    }


